import pandas as pd
import os
"""两次处理修改通过@i标识"""
# 这个是不处理的文件
EXCLUDE_FILES = ['通行设施.csv', '室内设施.csv', '地名地址信息.csv', '事件活动.csv', '']
# 这个是特殊处理的文件，暂时忽略该特定的文件
EXCLUDE_SPECIFIED_FILES = ['csv/2016/公共设施.csv']


def _sovle(tt):
    """替换每个|为A"""
    try:
        if isinstance(tt, str):
            return tt.replace("|", "A")
    except BaseException as e:
        print(type(tt))
        print(tt)
        raise e


def get_all_csv(source_path, dest_path):
    """获取所有csv文件，这个设计不好，更好应该为： get_files(source_path,dest_path,source_type,dest_path=source_type)"""
    res = []
    for fileName in os.listdir(source_path):
        source_file_path = source_path+os.sep+fileName
        if fileName.endswith(".csv") and fileName not in EXCLUDE_FILES and source_file_path not in EXCLUDE_SPECIFIED_FILES:
            res.append(
                (source_file_path, dest_path+os.sep +
                 os.path.splitext(os.path.split(
                     source_file_path)[-1])[0]+".csv"
                 )
            )
        elif os.path.isdir(source_file_path):
            res.extend(get_all_csv(source_path+os.sep +
                       fileName, dest_path+os.sep+fileName))
    return res

# 这个是怕手动分类不唯一导致一个key多个类别，这里assert一下
types = pd.read_csv('/home/fredyvia/dbf_data_solve/res_types.csv')
types_tmp = types.groupby(
    ["SUBTYPE", "CATEGORY"]).size().to_frame("COUNT")
types_tmp = types_tmp[types_tmp["COUNT"] != 1]
assert types_tmp.empty

# solved_files = []
# fd = open("solved_files.txt", mode='wb+')
# current_line = fd.readline()
# while current_line:
#     solved_files.append(current_line)
# print(types)

# @1 处理所有文件用这个
files = get_all_csv("csv", "csv_type")

# @2 处理但个文件用这个
files = [("csv/2016/公共设施.csv", "csv_type/2016/公共设施.csv")]

for source_file, dest_file in files:
    print("solving", source_file)
    dest_dir = os.path.dirname(dest_file)
    if not os.path.exists(dest_dir):
        # 递归构建目录
        os.makedirs(dest_dir)
    # @1 'LON','LAT'
    # @2 '火星X', '火星Y', '大地X', '大地Y'
    # 只读取指定字段 这个是特殊文件的，通用文件要改一下这个usecols  ││
    df_tmp = pd.read_csv(source_file, usecols=[# 箭头左边要改 v
                         '火星X', '火星Y', '大地X', '大地Y',       'TYPECODE', 'BASETYPE', 'SUBTYPE', 'CATEGORY'])
    df_tmp = df_tmp.merge(types, on=["SUBTYPE", "CATEGORY"], how="left")
    df_tmp["大类"] = df_tmp["中类"].map(lambda tt: tt[0])
    df_tmp["TYPECODE"] = df_tmp["TYPECODE"].map(lambda tt: _sovle(tt))
    df_tmp["BASETYPE"] = df_tmp["BASETYPE"].map(lambda tt: _sovle(tt))
    df_tmp["SUBTYPE"] = df_tmp["SUBTYPE"].map(lambda tt: _sovle(tt))
    df_tmp["CATEGORY"] = df_tmp["CATEGORY"].map(lambda tt: _sovle(tt))
    df_tmp.to_csv(dest_file, index=False)
